/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.knolle.lotes.gui;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import org.marcelo.agro.constantes.IConstantes;
import org.marcelo.agro.core.DynamicLookup;
import org.marcelo.agro.entidades.Lotes;
import org.marcelo.agro.core.api.ILotes;
import org.marcelo.comun.notificaciones.Notificaciones;
import org.openide.DialogDisplayer;
import org.openide.WizardDescriptor;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.awt.ActionRegistration;
import org.openide.util.ImageUtilities;
import org.openide.util.Lookup;

// An example action demonstrating how the wizard could be called from within
// your code. You can move the code below wherever you need, or register an action:
 @ActionID(category="Lotes", id="org.knolle.lotes.gui.LotesWizardAction")
 @ActionRegistration(displayName="Nuevo Lote")
 @ActionReference(path="Menu/Registros", position=100)

/**
 * 
 * @author marcelo
 * Estos paneles podrian ser dinamicos, para que en caso de que sea por alquiler, se le permita al usuario ingresar los detalles del alquiler
 * Estos detalles son importantes para llevar la cuenta de que tipo de sistema de pago se esta utilizando y cuanta gente utiliza 
 * lotes alquilados,
 * 
 */
public final class LotesWizardAction implements ActionListener {
        
    @Override
    public void actionPerformed(ActionEvent e) {
        List<WizardDescriptor.Panel<WizardDescriptor>> panels = new ArrayList<WizardDescriptor.Panel<WizardDescriptor>>();
            panels.add(new LotesWizardPanel1());
        String[] steps = new String[panels.size()];
        for (int i = 0; i < panels.size(); i++) {
            Component c = panels.get(i).getComponent();
            // Default step name to component name of panel.
            steps[i] = c.getName();
            if (c instanceof JComponent) { // assume Swing components
                JComponent jc = (JComponent) c;
                jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, i);
                jc.putClientProperty(WizardDescriptor.PROP_CONTENT_DATA, steps);
                jc.putClientProperty(WizardDescriptor.PROP_AUTO_WIZARD_STYLE, true);
                jc.putClientProperty(WizardDescriptor.PROP_CONTENT_DISPLAYED, true);
                jc.putClientProperty(WizardDescriptor.PROP_CONTENT_NUMBERED, true);
                
            }
        }
        WizardDescriptor wiz = new WizardDescriptor(new WizardDescriptor.ArrayIterator<WizardDescriptor>(panels));
        // {0} will be replaced by WizardDesriptor.Panel.getComponent().getName()
//        Aca cargar una imagen que pegue con el sistema
        wiz.putProperty(WizardDescriptor.PROP_IMAGE, ImageUtilities.loadImage("org/demo/wizard/banner.PNG", true));
        wiz.setTitleFormat(new MessageFormat("{0}"));
        wiz.setTitle("Agregar lotes");
        if (DialogDisplayer.getDefault().notify(wiz) == WizardDescriptor.FINISH_OPTION) {
            // Aqui es donde se guardaran los datos, crear un objeto nuevo y setear los datos del wizard al objeto
            // Una vez seteado todo esto meter los datos en la base de datos
            Lotes lote = (Lotes) wiz.getProperty("lote");
//            Invocar al lookup para realizar el guardado
            ILotes il = Lookup.getDefault().lookup(ILotes.class);
            try {
                il.saveOrUpdate(lote);
                DynamicLookup.getDefault().setSingleton(lote);
            }
            catch (Exception excepcion){
                Notificaciones.showMessageBox(
                        Notificaciones.WARNING_MESSAGE, 
                        IConstantes.MENSAJE_ERROR_AL_GUARDAR + excepcion.toString()
                );
            }
            //se guardo con exito
        }
    }
}
